package hr.ctg.service.dao;

import hr.ctg.domain.model.Objava;
import hr.jpa.dao.GenericDAOImpl;

import java.util.List;

import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Name;

@AutoCreate
@Name("objavaDAO")
public class ObjavaDAO extends GenericDAOImpl<Objava, Integer> {

	@SuppressWarnings("unchecked")
	public List<Objava> findByIdTipaObjave(final int idTipaObjave) {
		return entityManager.createNamedQuery("Objava.findByIdTipaObjave")
				.setParameter(1, idTipaObjave).getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Objava> findByIdTipaObjaveIdObjekta(final int idTipaObjave,
			final int idObjekta) {
		return entityManager.createNamedQuery(
				"Objava.findByIdTipaObjaveIdObjekta").setParameter(1,
				idTipaObjave).setParameter(2, idObjekta).getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Objava> findByIdTipaObjaveIdMjesta(final int idTipaObjave,
			final int idMjesta) {
		return entityManager.createNamedQuery(
				"Objava.findByIdTipaObjaveIdMjesta").setParameter(1,
				idTipaObjave).setParameter(2, idMjesta).getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Objava> findByIdTipaObjaveIdOtoka(final int idTipaObjave,
			final int idOtoka) {
		return entityManager.createNamedQuery(
				"Objava.findByIdTipaObjaveIdOtoka").setParameter(1,
				idTipaObjave).setParameter(2, idOtoka).getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Objava> findByIdTipaObjaveIdParka(final int idTipaObjave,
			final int idParka) {
		return entityManager.createNamedQuery(
				"Objava.findByIdTipaObjaveIdParka").setParameter(1,
				idTipaObjave).setParameter(2, idParka).getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Objava> findByIdTipaObjaveIdObjekta(final int idTipaObjave,
			final int idObjekta, final int max) {
		return entityManager.createNamedQuery(
				"Objava.findByIdTipaObjaveIdObjekta").setParameter(1,
				idTipaObjave).setParameter(2, idObjekta).setMaxResults(max)
				.getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Objava> findByIdTipaObjaveIdMjesta(final int idTipaObjave,
			final int idMjesta, final int max) {
		return entityManager.createNamedQuery(
				"Objava.findByIdTipaObjaveIdMjesta").setParameter(1,
				idTipaObjave).setParameter(2, idMjesta).setMaxResults(max)
				.getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Objava> findByIdTipaObjaveIdOtoka(final int idTipaObjave,
			final int idOtoka, final int max) {
		return entityManager.createNamedQuery(
				"Objava.findByIdTipaObjaveIdOtoka").setParameter(1,
				idTipaObjave).setParameter(2, idOtoka).setMaxResults(max)
				.getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Objava> findByIdTipaObjaveIdParka(final int idTipaObjave,
			final int idParka, final int max) {
		return entityManager.createNamedQuery(
				"Objava.findByIdTipaObjaveIdParka").setParameter(1,
				idTipaObjave).setParameter(2, idParka).setMaxResults(max)
				.getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Objava> findLastObjave(final Integer max) {
		return entityManager.createNamedQuery("Objava.findByDatum")
				.setMaxResults(max).getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Objava> findByIdKorisnika(final Integer idKorisnika) {
		return entityManager.createNamedQuery("Objava.findByIdKorisnika")
				.setParameter(1, idKorisnika).getResultList();
	}

	public List<Objava> findByIdObjekta(final Integer idObjekta) {
		return executeNamedQuery("Objava.findByIdObjekta", idObjekta);
	}

	public List<Objava> findByIdMjesta(final Integer idMjesta) {
		return executeNamedQuery("Objava.findByIdMjesta", idMjesta);
	}

	public List<Objava> findByIdOtoka(final Integer idOtoka) {
		return executeNamedQuery("Objava.findByIdOtoka", idOtoka);
	}

	public List<Objava> findByIdParka(final Integer idParka) {
		return executeNamedQuery("Objava.findByIdParka", idParka);
	}

}
